﻿using GameProtocol.Common;
using GameProtocol.Dto;
using GameProtocol.Protocol;
using RPGGameServer.Cache;
using RPGGameServer.Tools;
using ServerFrame;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RPGGameServer.Biz
{
    public class AccountBiz:IBiz
    {
        private AccountCache accountCache = CacheManager.Get<AccountCache>();
        /// <summary>
        /// 创建账号
        /// </summary>
        /// <param name="token"></param>
        /// <param name="dto"></param>
        public void Create(UserToken token, AccountDto dto)
        {
            //验证账号密码是否合法
            if (string.IsNullOrEmpty(dto.account) || string.IsNullOrEmpty(dto.password))
            {
                //TODO: 通知客户端账号密码不合法
                //ExUserToken.Send(token, ErrorCode.AcountPasswordIsNotSafe);
                token.Send(ErrorCode.AcountPasswordIsNotSafe);

                return;
            }

            //TODO: 验证账号是否被注册
            if (accountCache.HasAccount(dto.account))
            {
                //TODO: 通知客户都账号已经被注册
                //ExUserToken.Send(token, ErrorCode.AccountHasResgiter);
                token.Send(ErrorCode.AccountHasResgiter);

                return;
            }

            //调用缓存创建账号
            accountCache.Add(token, dto);
            //TODO: 通知客户端账号注册成功
            //ExUserToken.Send(token, Protocal.Login, LoginProtocol.S2C_Register);
            token.Send(Protocal.Login, LoginProtocol.S2C_Register);

        }

        /// <summary>
        /// 登录账号
        /// </summary>
        /// <param name="token"></param>
        /// <param name="account"></param>
        /// <param name="password"></param>
        public ErrorCode Login(UserToken token, string account, string password)
        {
            //验证账号或者密码是否合法
            if (string.IsNullOrEmpty(account) || string.IsNullOrEmpty(password))
            {
                //TODO: 返回错误信息
                return ErrorCode.AcountPasswordIsNotSafe;
            }
            //验证账号是否已经被注册
            if (!accountCache.HasAccount(account))
            {
                return ErrorCode.NotHasAccount;
            }
            //验证账号是否已经登录,如果已经登录了，就不能再登录了
            if (accountCache.IsOnline(token))
            {
                return ErrorCode.HasLogin;
            }
            //验证账号密码是否匹配
            if (!accountCache.Matching(account, password))
            {
                return ErrorCode.NotMatch;
            }

            //用户上线
            accountCache.Online(token, account);
            return ErrorCode.Success;
        }
    }
}
